//在index.js中引入axios
import axios from 'axios';
//antd的message提示组件，大家可根据自己的ui组件更改。
import { message } from 'antd'

//保存环境变量
// const isPrd = process.env.NODE_ENV == 'production';

//区分开发环境还是生产环境基础URL
// export const baseURL = isPrd ? 'https://www.production.com' : 'http://www.development.com'

const baseURL = process.env.BASE_URL

//设置axios基础路径
const service = axios.create({
  baseURL: baseURL
})

// 请求拦截器
service.interceptors.request.use(config => {
  // 每次发送请求之前本地存储中是否存在token，也可以通过Redux这里只演示通过本地拿到token
  // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
  // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断 
  const token = localStorage.getItem('token') || ''
  //设置请求头
  config.headers = {
    'Content-Type': 'application/json;charset=utf-8',
    'Authorization': token
  }
  return config
}, error => {
  return error;
})

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data;
    if (res.code !== 1) {
      // Message({
      //   message: res.message || 'Error',
      //   type: 'error',
      //   duration: 5 * 1000
      // })
      message.error(res.message || 'Error')
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res;
    }
  },
  error => {
    const { status } = error.response;
    if (status === 401) {
      // TODO 跳转到登录页面
      window.location.href = '/#/login'
    } else {
      //这里处理一些请求出错的情况
      //比如网络不通畅等
      message.error('系统异常，请联系管理员');
      // return Promise.reject(error);
    }
  }
)

// 改造一下
const _service = (url, method, data) => service({ url, method, data })
//最后把封装好的axios导出
export default _service
